home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / misc / dspice0s / cmeyer.c < prev    next >
C/C++ Source or Header  |  1992-11-21  |  6KB  |  211 lines

  1. /* cmeyer.f -- translated by f2c (version of 3 February 1990  3:36:42).
  2.    You must link the resulting object file with the libraries:
  3.     -lF77 -lI77 -lm -lc   (in that order)
  4. */
  5.  
  6. #include "f2c.h"
  7.  
  8. /* Common Block Declarations */
  9.  
  10. struct {
  11.     doublereal omega, time, delta, delold[7], ag[7], vt, xni, egfet, xmu, 
  12.         sfactr;
  13.     integer mode, modedc, icalc, initf, method, iord, maxord, noncon, iterno, 
  14.         itemno, nosolv, modac, ipiv, ivmflg, ipostp, iscrch, iofile;
  15. } status_;
  16.  
  17. #define status_1 status_
  18.  
  19. struct {
  20.     doublereal vto, beta, gamma, phi, phib, cox, xnsub, xnfs, xd, xj, xld, 
  21.         xlamda, uo, uexp, vbp, utra, vmax, xneff, xl, xw, vbi, von, vdsat,
  22.          qspof, beta0, beta1, cdrain, xqco, xqc, fnarrw, fshort;
  23.     integer lev;
  24. } mosarg_;
  25.  
  26. #define mosarg_1 mosarg_
  27.  
  28. struct {
  29.     doublereal twopi, xlog2, xlog10, root2, rad, boltz, charge, ctok, gmin, 
  30.         reltol, abstol, vntol, trtol, chgtol, eps0, epssil, epsox, pivtol,
  31.          pivrel;
  32. } knstnt_;
  33.  
  34. #define knstnt_1 knstnt_
  35.  
  36. /*<       subroutine cmeyer (vgs0,vgd0,vgb0,von0,vdsat0,vgs1,vgd1,vgb1, >*/
  37. /*<      1   covlgs,covlgd,covlgb,cgs0,cgd0,cgb0,cgs1,cgd1,cgb1) >*/
  38. /* Subroutine */ int cmeyer_(vgs0, vgd0, vgb0, von0, vdsat0, vgs1, vgd1, vgb1,
  39.      covlgs, covlgd, covlgb, cgs0, cgd0, cgb0, cgs1, cgd1, cgb1)
  40. doublereal *vgs0, *vgd0, *vgb0, *von0, *vdsat0, *vgs1, *vgd1, *vgb1, *covlgs, 
  41.     *covlgd, *covlgb, *cgs0, *cgd0, *cgb0, *cgs1, *cgd1, *cgb1;
  42. {
  43.     static doublereal vgbt, vons, vddif;
  44.     static integer indax;
  45.     static doublereal vddif1, vddif2, vdbsat, cgb, cgd, vdb, cgs, vgb, vgd, 
  46.         vbs, vds, vgs;
  47.  
  48. /*<       implicit double precision (a-h,o-z) >*/
  49.  
  50. /*     this routine computes the mosfet overlap capacitances as functions 
  51. */
  52. /* of the device terminal voltages. */
  53.  
  54. /* spice version 2g.6  sccsid=status 3/15/83 */
  55. /*<       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, >*/
  56. /*<      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, >*/
  57. /*<      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile >*/
  58. /* spice version 2g.6  sccsid=mosarg 3/15/83 */
  59. /*<       common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, >*/
  60. /*<      1   xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, >*/
  61. /*<      2   beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev >*/
  62. /* spice version 2g.6  sccsid=knstnt 3/15/83 */
  63. /*<       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, >*/
  64. /*<      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, >*/
  65. /*<      2   pivtol,pivrel >*/
  66. /*<       indax=1 >*/
  67.     indax = 1;
  68. /*<       vgs=vgs1 >*/
  69.     vgs = *vgs1;
  70. /*<       vgd=vgd1 >*/
  71.     vgd = *vgd1;
  72. /*<       vgb=vgb1 >*/
  73.     vgb = *vgb1;
  74. /*<       vons=von >*/
  75.     vons = mosarg_1.von;
  76. /*<       vbs=vgs-vgb >*/
  77.     vbs = vgs - vgb;
  78. /*<       vdbsat=vdsat-vbs >*/
  79.     vdbsat = mosarg_1.vdsat - vbs;
  80. /*<       vdb=vgb-vgd >*/
  81.     vdb = vgb - vgd;
  82. /*<    10 vds=vgs-vgd >*/
  83. L10:
  84.     vds = vgs - vgd;
  85. /*<       vgbt=vgs-vons >*/
  86.     vgbt = vgs - vons;
  87. /*<       if (vgbt.gt.-phi) go to 100 >*/
  88.     if (vgbt > -mosarg_1.phi) {
  89.     goto L100;
  90.     }
  91. /*<       cgb=cox+covlgb >*/
  92.     cgb = mosarg_1.cox + *covlgb;
  93. /*<       cgd=covlgd >*/
  94.     cgd = *covlgd;
  95. /*<       cgs=covlgs >*/
  96.     cgs = *covlgs;
  97. /*<       go to 430 >*/
  98.     goto L430;
  99.  
  100.  
  101. /*<   100 if (vgbt.gt.-phi/2.0d0) go to 200 >*/
  102. L100:
  103.     if (vgbt > -mosarg_1.phi / 2.) {
  104.     goto L200;
  105.     }
  106. /*<       cgb=-vgbt*cox/phi+covlgb >*/
  107.     cgb = -vgbt * mosarg_1.cox / mosarg_1.phi + *covlgb;
  108. /*<       cgd=covlgd >*/
  109.     cgd = *covlgd;
  110. /*<       cgs=covlgs >*/
  111.     cgs = *covlgs;
  112. /*<       go to 430 >*/
  113.     goto L430;
  114.  
  115.  
  116. /*<   200 if (vgbt.gt.0.0d0) go to 300 >*/
  117. L200:
  118.     if (vgbt > 0.) {
  119.     goto L300;
  120.     }
  121. /*<       cgb=-vgbt*cox/phi+covlgb >*/
  122.     cgb = -vgbt * mosarg_1.cox / mosarg_1.phi + *covlgb;
  123. /*<       cgd=covlgd >*/
  124.     cgd = *covlgd;
  125. /*<       cgs=cox/(7.5d-1*phi)*vgbt+cox/1.5d0+covlgs >*/
  126.     cgs = mosarg_1.cox / (mosarg_1.phi * .75) * vgbt + mosarg_1.cox / 1.5 + *
  127.         covlgs;
  128. /*<       go to 430 >*/
  129.     goto L430;
  130.  
  131.  
  132. /*<   300 if (vdbsat.gt.vdb) go to 400 >*/
  133. L300:
  134.     if (vdbsat > vdb) {
  135.     goto L400;
  136.     }
  137. /*<       cgb=covlgb >*/
  138.     cgb = *covlgb;
  139. /*<       cgd=covlgd >*/
  140.     cgd = *covlgd;
  141. /*<       cgs=cox/1.5d0+covlgs >*/
  142.     cgs = mosarg_1.cox / 1.5 + *covlgs;
  143. /*<       go to 430 >*/
  144.     goto L430;
  145.  
  146.  
  147. /*<   400 vddif=2.0d0*vdbsat-vdb >*/
  148. L400:
  149.     vddif = vdbsat * 2. - vdb;
  150. /*<       vddif1=vdbsat-vdb-1.0d-12 >*/
  151.     vddif1 = vdbsat - vdb - 1e-12;
  152. /*<       vddif2=vddif*vddif >*/
  153.     vddif2 = vddif * vddif;
  154. /*<       cgd=cox*(1.0d0-vdbsat*vdbsat/vddif2)/1.5d0+covlgd >*/
  155.     cgd = mosarg_1.cox * (1. - vdbsat * vdbsat / vddif2) / 1.5 + *covlgd;
  156. /*<       cgs=cox*(1.0d0-vddif1*vddif1/vddif2)/1.5d0+covlgs >*/
  157.     cgs = mosarg_1.cox * (1. - vddif1 * vddif1 / vddif2) / 1.5 + *covlgs;
  158. /*<       cgb=covlgb >*/
  159.     cgb = *covlgb;
  160.  
  161.  
  162. /*<   430 go to (440,560), indax >*/
  163. L430:
  164.     switch (indax) {
  165.     case 1:  goto L440;
  166.     case 2:  goto L560;
  167.     }
  168. /*<   440 indax=2 >*/
  169. L440:
  170.     indax = 2;
  171. /*<       cgs1=cgs >*/
  172.     *cgs1 = cgs;
  173. /*<       cgd1=cgd >*/
  174.     *cgd1 = cgd;
  175. /*<       cgb1=cgb >*/
  176.     *cgb1 = cgb;
  177. /*<       vgs=vgs0 >*/
  178.     vgs = *vgs0;
  179. /*<       vgd=vgd0 >*/
  180.     vgd = *vgd0;
  181. /*<       vgb=vgb0 >*/
  182.     vgb = *vgb0;
  183. /*<       vons=von0 >*/
  184.     vons = *von0;
  185. /*<       vbs=vgs-vgb >*/
  186.     vbs = vgs - vgb;
  187. /*<       vdbsat=vdsat0-vbs >*/
  188.     vdbsat = *vdsat0 - vbs;
  189. /*<       vdb=vgb-vgd >*/
  190.     vdb = vgb - vgd;
  191. /*<       go to 10 >*/
  192.     goto L10;
  193.  
  194.  
  195. /*<   560 cgs0=cgs >*/
  196. L560:
  197.     *cgs0 = cgs;
  198. /*<       cgd0=cgd >*/
  199.     *cgd0 = cgd;
  200. /*<       cgb0=cgb >*/
  201.     *cgb0 = cgb;
  202.  
  203. /*  finished */
  204.  
  205. /*<  1000 return >*/
  206. /* L1000: */
  207.     return 0;
  208. /*<       end >*/
  209. } /* cmeyer_ */
  210.  
  211.